const MyPromise = require('./MyPromise');



// 一、用promise改进异步代码
setTimeout(function() {
  var a = 'hello ';
  setTimeout(function() {
    var b = 'lagou ';
    setTimeout(function() {
      var c = 'I love you';
      console.log(a + b + c);
    }, 10);
  }, 10);
}, 10);

MyPromise
  .resolve('hello ')
  .then((resp) => resp + 'lagou ')
  .then((resp) => {
    setTimeout(function() {
      console.log(resp + 'I love you');
    }, 30);
  });



// 二、基于以下代码完成四个练习
const fp = require('lodash/fp');
const _ = require('lodash');
// 数据
// horsepower 马力，dollar_value 价格
// in_stock 库存
const cars = [
  { name: 'Ferrari FF', horsepower: 660, dollar_value: 700000, in_stock: true },
  { name: 'Spyker C12 Zagato', horsepower: 650, dollar_value: 64800, in_stock: false },
  { name: 'Jaguar XKR-S', horsepower: 550, dollar_value: 132000, in_stock: false },
  { name: 'Audi R8', horsepower: 525, dollar_value: 114200, in_stock: false },
  { name: 'Aston Martin One-77', horsepower: 750, dollar_value: 1850000, in_stock: true },
  { name: 'Pagani Huayra', horsepower: 700, dollar_value: 1300000, in_stock: false }
];

// demo-1
const lastStock = _.flowRight(fp.prop('in_stock'), fp.last);
console.log(lastStock(cars), 'lastStock');

// demo-2
const firstName = _.flowRight(fp.prop('name'), fp.first);
console.log(firstName(cars));

// demo-3
let _average = function(xs) {
  return fp.reduce(fp.add, 0, xs) / xs.length;
}
let averagerDollarValue = function(cars) {
  let dollar_values = fp.map(function(car) {
    return car.dollar_value;
  }, cars);
  return _average(dollar_values);
}

const averageDollar = _.flowRight(_average, fp.map(fp.prop('dollar_value')));
console.log(averageDollar(cars));

// demo-4
let _underscore = fp.replace(/\W+/g, '_');
const sanitizeNames = _.flowRight(_underscore, fp.toLower);
console.log(sanitizeNames(['Hello World']));
